﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using CapaPresentacion.Commands;
using CapaPresentacion.Vistas;
using Entidades;
using CapaLogica;
using System.Windows.Input;
using System.Windows;
using System.Windows.Data;
using System.Transactions;
using CapaPresentacion.Controles;

namespace CapaPresentacion.Vistas
{
    class VentanaBusquedaInscripcionesViewModel
    {

        public event EditarEntidad EditarEntidad;

        private RelayCommand buscarInscripcionesCommand;
        private RelayCommand editarInscripcionCommand;
        private RelayCommand eliminarInscripcionCommand;


        private Guid idSeleccionado;
        private string añoSeleccionado;

        public string AñoSeleccionado
        {
            get { return añoSeleccionado; }
            set { añoSeleccionado = value; }
        }
        
        public List<ViewEntity> ListaAlumnos { get; set; }

        public Guid IdSeleccionado
        {
            get { return idSeleccionado; }
            set { idSeleccionado = value; }
        }

        public ICommand BuscarInscripcionesCommand
        {
            get
            {
                return buscarInscripcionesCommand;
            }
        }

        public ICommand EditarInscripcionCommand
        {
            get
            {
                return editarInscripcionCommand; 
            }
        }

        public ICommand EliminarInscripcionCommand
        {
            get
            {
                return eliminarInscripcionCommand; 
            }
        }

        private VentanaBusquedaInscripciones view;


         public VentanaBusquedaInscripcionesViewModel() { }

        public VentanaBusquedaInscripcionesViewModel(VentanaBusquedaInscripciones vista)
        {
            this.view = vista;
            this.buscarInscripcionesCommand = new RelayCommand(BuscarAlumnosInscriptos);
            this.editarInscripcionCommand = new RelayCommand(EditarInscripcion);

            this.añoSeleccionado = DateTime.Now.Year.ToString();

            this.view.btnEliminar.Visibility = Visibility.Collapsed;
        }

        public VentanaBusquedaInscripcionesViewModel(VentanaBusquedaInscripciones vista, string eliminar)
        {
            this.view = vista;
            this.buscarInscripcionesCommand = new RelayCommand(BuscarAlumnosInscriptos);
            this.eliminarInscripcionCommand = new RelayCommand(EliminarInscripcion);
            this.view.btnEliminar.Visibility = Visibility.Visible;
            this.view.btnEditar.Visibility = Visibility.Collapsed;
            this.view.titulo.Content = "Eliminar Inscripción de Alumno a Turno";

            this.añoSeleccionado = DateTime.Now.Year.ToString();

        }

         private void BuscarAlumnosInscriptos(Object parameter)
         {
             if (this.añoSeleccionado.Length == 4)
             {
                 CicloLectivo ciclo = new CicloLectivoLogica().ObtenerEntidadParaEditar(Convert.ToInt32(añoSeleccionado));

                 if(ciclo != null)
                 {
                     ListaAlumnos = new InscripcionAlumnoLogica().ObtenerAlumnosInscriptosCicloParaEditar(Convert.ToInt32(añoSeleccionado));

                     if (ListaAlumnos != null && ListaAlumnos.Count > 0)
                     {
                         this.view.listaDatos.ItemsSource = ListaAlumnos;
                         this.view.panelResultados.Visibility = Visibility.Visible;
                         this.view.lblNoRecords.Visibility = Visibility.Collapsed;
                         this.view.lblCicloLectivoNoRecords.Visibility = Visibility.Collapsed;
                     }
                     else
                     {
                         this.view.panelResultados.Visibility = Visibility.Collapsed;
                         this.view.lblNoRecords.Visibility = Visibility.Visible;
                         this.view.lblCicloLectivoNoRecords.Visibility = Visibility.Collapsed;
                     }
                 }
                 else
                 {
                     this.view.panelResultados.Visibility = Visibility.Collapsed;
                     this.view.lblNoRecords.Visibility = Visibility.Collapsed;                         
                     this.view.lblCicloLectivoNoRecords.Visibility = Visibility.Visible;

                 }
             }
             else
             {
                 VentanaAviso nueva = new VentanaAviso(true, "Se ha producido un error", "El campo 'Año' ha sido ingresado de forma incorrecta");
                 nueva.ShowDialog();  

             }


         }

         private void EditarInscripcion(Object parameter)
         {
             if (this.idSeleccionado != Guid.Empty)
             {
                 this.view.lblNoSelected.Visibility = Visibility.Collapsed;

                 InscripcionCicloLectivo entidad = new InscripcionAlumnoLogica().ObtenerEntidadParaEditar(idSeleccionado, Convert.ToInt32(añoSeleccionado));
                 this.EditarEntidad(CasosDeUso.InscribirAlumno, entidad);
                 this.view.Close();

             }
             else
             {
                 this.view.lblNoSelected.Visibility = Visibility.Visible;
             }

         }

         private void EliminarInscripcion(Object parameter)
         {

             if (this.idSeleccionado != Guid.Empty)
             {
                 if (MessageBox.Show("¿Está seguro que desea eliminar la inscripción seleccionada?", "Confirme su Decisión", MessageBoxButton.YesNo, MessageBoxImage.Warning) == MessageBoxResult.Yes)
                 {
                     this.view.lblNoSelected.Visibility = Visibility.Collapsed;

                     InscripcionCicloLectivo entidad = new InscripcionAlumnoLogica().ObtenerEntidadParaEditar(idSeleccionado, Convert.ToInt32(añoSeleccionado));

                     if (!new InscripcionAlumnoLogica().TieneEvaluación(entidad.IdInscripcionCicloLectivo))
                     {
                         entidad.Eliminada = true;
                         new InscripcionAlumnoLogica().Modificar(entidad);

                         VentanaAviso nueva = new VentanaAviso(false, "Finalización exitosa", "La inscripción del alumno seleccionado a ese ciclo lectivo ha sido eliminada");
                         nueva.ShowDialog();
                         this.view.Close();
                     }
                     else
                     {
                         VentanaAviso nueva = new VentanaAviso(true, "Se ha producido un error", "No es posible eliminar la inscripción porque tiene cargada una evaluación");
                         nueva.ShowDialog();

                     }


                 }

             }
             else
             {
                 this.view.lblNoSelected.Visibility = Visibility.Visible;
             }

         }


    }
}
